package www.lagou.Dao;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import www.lagou.utils.DruidUtils;

import java.math.BigDecimal;
import java.sql.SQLException;

public class AccountDao {
    /**
     * 根据卡号查询账户余额
     */
    public Double getBalanceByCard(String card) throws SQLException {
        //使用连接池创建QueryRunner对象；
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());//设置自动创建连接模式
        //创建sql语句用于查询账户余额
        String sql = "select balance from Account where card = ?;";
        //传入card参数然后执行查询命令，返回结果使用ScalarHandler类封装
        Double bal = qr.query(sql,new ScalarHandler<>(),card);
        return bal;
    }

    /**
     * 通过账户卡号进行转账操作
     */
    public boolean bankTransfer(String fromCard,String toCard,Double tranQty) throws SQLException {
        try {
            //使用连接池创建QueryRunner对象；
            QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());//设置自动创建连接模式
            //创建sql语句用于修改转出和转入两个账户的余额
            String sql1 = "update Account set balance = balance - ? where card = ? ;";
            String sql2 = "update Account set balance = balance + ? where card = ? ;";
            //创建object对象数组存放预备传入的参数
            Object[] param1 = {tranQty, fromCard};
            Object[] param2 = {tranQty, toCard};
            //分别执行修改数据行的命令
            qr.update(sql1, param1);
            qr.update(sql2, param2);
            //创建交易Dao类对象指向它自身的引用
            TransactionDao td = new TransactionDao();
            //调用自定义方法写入本次转账类型交易的两条记录
            td.writeTransLog(fromCard, toCard, tranQty);
            return true;
        }catch (Exception e){
            return false;
        }
    }

}
